package main

import "fmt"

// 计算任意两个数字相加
// 泛型：可以给参数指定多个类型
// 函数中定义泛型：[T 类型1 | 类型2 | ..]
// 好处：可以提高代码的复用
func Add[T int | float64](a, b T) T {
	return a + b
}

// 泛型切片
func Get_sum[T int | float64](nums []T) T {
	var sum T
	for i := 0; i < len(nums); i++ {
		sum += nums[i]
	}
	return sum
}

// any 可以任意一种类型
func print[T any](value T) {
	fmt.Println("传递的值：", value)
}

// 定义一个类型集合
type Number interface {
	int | float64
}

// 结构体中使用泛型
type Student[T Number] struct {
	Name    string
	Chinese T
	Math    T
}

func main() {
	// 通过结构体创建结构体变量
	s1 := Student[int]{"小明", 80, 90}
	fmt.Println(s1)
	s2 := Student[float64]{"小明", 80.5, 90.5}
	fmt.Println(s2)

	// print("hello")
	// print(1)
	// print(true)
	// fmt.Println([]int{2, 3, 4})

	// nums1 := []int{1, 2, 3, 4, 5}
	// fmt.Println(Get_sum(nums1))
	// nums2 := []float64{1.8, 2.9, 3.5, 4.7, 5.5}
	// fmt.Println(Get_sum(nums2))

	// n1, n2 := 3.14, 4.2
	// fmt.Println(Add(n1, n2))
	// n3, n4 := 3, 4
	// fmt.Println(Add(n3, n4))
}
